package com.itany.corejava.code07_面向对象.封装;

/**
 * @author MissChen
 * @version 1.0
 * @date 2023 年11月02日 11:32
 */

/*
Poker一副牌
Poker中有一个属性:Card[]
每副牌有54张牌，四种花色:A-K+大小王
*/

public class Poker {
    private Card[] cards;
    public void setCards(Card[] cards){
        this.cards=cards;
    }
    public Card[] getCards(){
        return cards;
    }
    // 定义构造方法，为一副牌添加54张牌
    public Poker(){

        //定义一副牌有54张
        cards=new Card[54];

        //为每张牌定义花色的范围
        String[] colors={"黑桃","红桃","方块","梅花"};

        //定义每张牌的点数范围
        String[] nums={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};

        //通过双重循环，为每一张牌设置值
        int index=0;
        for(int i=0;i<colors.length;i++){//外层循环控制花色
            for(int j=0;j<nums.length;j++){//内层循环控制点数
                Card card=new Card(colors[i],nums[j]);//创建一张牌的实例
                cards[index++]=card;

            }

        }

        //添加大小王
        cards[index++]=new Card("大","王");
        cards[index++]=new Card("小","王");

    }

    //洗牌，将牌的顺序打乱后展示
    public void shuffleCards(){
        Card[] cards=new Card[54];//定义一个相同长度、相同类型的数组，用于存储洗牌后的数据
        for(int i=0;i<cards.length;i++){
            int index=(int)(Math.random()*54);//随机获取0-53的随机整数，因为54张牌，索引是从0-53
            Card card=this.cards[index];//随机出来的一张牌
            while(card==null){//如果取出来的那张牌的实例为null，此时说明该下标所对应的牌已经被获取过了，重新随机一张
                index=(int)(Math.random()*54);
                card=this.cards[index];
            }


            cards[i]=card;//将随机出来的一张牌添加到新的数组中去
            this.cards[index]=null;//
        }

        this.cards=cards;


    }





}
